package com.dd.cloud.user.entity.doctor;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dd.cloud.user.entity.menu.ClientMenu;
import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
import com.gitee.sunchenbin.mybatis.actable.constants.MySqlTypeConstant;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 医生账号信息表
 * </p>
 *
 * @author czg
 * @since 2022-04-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Table(comment = "医生用户表")
public class DoctorUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 医生账号信息表
     */
    @TableId(value = "id", type = IdType.AUTO)
    @Column(isKey = true, isAutoIncrement = true)
    private Integer id;

    /**
     * 手机号码
     */
    @Column(length = 20, comment = "手机号码")
    private String mobileNumber;

    /**
     * 密码
     */
    @Column(length = 64, comment = "密码")
    private String password;

    /**
     * 密码盐值
     */
    @Column(length = 64, comment = "密码盐值")
    private String salt;

    /**
     * 创建时间
     */
    @Column(comment = "创建时间")
    private LocalDateTime createDate;

    /**
     * 修改时间
     */
    @Column(comment = "修改时间")
    private LocalDateTime updateDate;


    /**
     * 有效日期
     */
    @Column(comment = "有效日期")
    private LocalDateTime termDate;

    /**
     * 注销时间
     */
    @Column(comment = "注销时间")
    private LocalDateTime logoffDate;

    /**
     * 备注
     */
    @Column(length = 100, comment = "备注")
    private String remark;

    /**
     * 操作人id
     */
    @Column(comment = "操作人id")
    private Integer operId;

    /**
     * 操作人id
     */
    @Column(comment = "操作人类型, 同登录类型")
    private Integer operType;

    /**
     * 操作人名字
     */
    @Column(length = 20, comment = "操作人名字")
    private String operName;

    /**
     * 状态：1=正常，其他异常
     */
    @Column(type = MySqlTypeConstant.TINYINT, comment = "状态：1=正常，其他异常")
    private Integer status;

    /**
     * 是否认证
     */
    @Column(length = 4, comment = "是否认证 0.未认证 1.已认证", defaultValue = "0")
    private Integer isCertification;

    /**
     * 机构id
     */
    @Column(comment = "机构id")
    private Integer mechanId;

    /**
     * 第三方标识码
     */
    @Column(comment = "第三方标识码, 比如医院的医生工号,医生id")
    private String hos_id;

    /**
     * 邀请码
     */
    @Column(length = 6, comment = "邀请码")
    private String inviteCode;

    /**
     * 邀请医生id
     */
    @Column(comment = "邀请医生id")
    private Integer inviteDocId;

    /**
     * 认证时间
     */
    @Column(comment = "认证时间")
    private LocalDateTime authDate;

    /**
     * 账号类型 1正式账号 2公益账号 21公益账号(无法认证)
     */
    @Column(comment = "账号类型 1正式账号 2公益账号 21公益账号(无法认证)", defaultValue = "1")
    private Integer type;

    /**
     * 可用菜单
     */
    @TableField(exist = false)
    private List<ClientMenu> menuList;

    /**
     * 1绑定成功 0绑定失败 2已有绑定账号且不是当前账号
     */
    @TableField(exist = false)
    private Integer bind;

    /**
     * 签约审方医生数量 0没有签约审方医生 1...有签约审方医生
     */
    @TableField(exist = false)
    private Integer reviewPresDoctorCount;

    /**
     * 邀请人码(快照)
     */
    @Column(comment = "邀请人码(快照)")
    private String codeRecord;

    /**
     * 邀请人
     */
    @Column(comment = "邀请人(快照)")
    private String inviteName;

    /**
     * 邀请人类型
     */
    @Column(comment = "邀请人类型(1.医生 2.销售 3.代理商)")
    private Integer inviteType;

    /**
     * 注销人
     */
    @Column(comment = "注销人", length = 32)
    private String logoffName;

    /**
     * 是否有处方权
     */
    @Column(comment = "处方权 0.未开启 1.开启", length = 4, defaultValue = "0")
    private Integer isPresPower;

    /**
     * 是否开通审方业务
     */
    @Column(comment = "是否开通审方业务 0.未开通 1.开通", length = 4, defaultValue = "0")
    private Integer isOpenReviewBo;

    /**
     * 认证类型
     */
    @Column(comment = "认证类型 0.正常认证 1.待完善资料认证 2.乡村医生认证", length = 4, defaultValue = "0")
    private Integer authType;

    /**
     * 互联网备案医生是否审核通过
     */
    @Column(comment = "是否审核通过", defaultValue = "0", length = 4)
    private Integer isPass;

    /**
     * 是否推送
     */
    @Column(comment = "是否推送 0.未推送 1.推送成功 2.推送失败", defaultValue = "0", length = 4)
    private Integer pushStatus;

    /**
     * 更新app版本赠送未认证使用免费次数版本号
     */
    @Column(comment = "更新app版本赠送未认证使用免费次数版本号", length = 10)
    private String freeAiVersion;

    /**
     * 功能引导
     */
    @Column(comment = "功能引导", length = 2)
    private String functionGuide;

    /**
     * 科室引导
     */
    @Column(comment = "科室引导", length = 2)
    private String depGuide;

    /**
     * 1.其他创建账号 2.PC创建端创建账号
     */
    @Column(comment = "创建账号端 1.其他 2.PC端", length = 4, defaultValue = "1")
    private Integer createAccountType;

}
